package cn.tedu.service;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

//spring的aop功能,其实就是为了增强方法的功能,由切点和通知组成
//aop的使用场景：事务管理,缓冲管理,权限管理,日志管理,性能测试
@Component
@Aspect//1.标记是一个切面
public class AspectTest {
    //2.切点:指定包,类,方法加功能
    //代表一个值 ..表示多个值 第一个*表示方法的返回值
    //第二个*表示类 第三个*表示方法
    @Pointcut("execution(* cn.tedu.service..*.*(..))")
    public void point() {
    }

    //3. 通知,本质就是一个方法,增强功能
    @Around("point()")//标记环绕通知,在方法执行前后都加了功能
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        Object o = joinPoint.proceed();
        long end = System.currentTimeMillis();

        System.out.println("aop用时"+(start-end)+"毫秒");
        return o;
    }


}










